<?php
/**
 * Responsável pela renderização das paginas htmls
 * 
 *  @autor Cristiano Moreira Gomes
 */
class Render{
	private static $Instancia;

	/**
	 * Function Singleton para instanciamento único da classe Aplicação
	 */ 
	public static function Instanciar(){
		if(!self::$Instancia){
			self::$Instancia = new Render;
			return self::$Instancia;
		}
		return self::$Instancia;
	}

	public function CarregaHtml($nome){

			$file = DIR_HTML . strtolower($nome) . '.html';
			$pag = file_get_contents($file);
			if($pag){
				while($mestre = $this->PossuiMaster($pag)){

					$file = DIR_MASTER . strtolower($mestre[1]) . '.html';
					$conteudo_mestre = file_get_contents($file);
					$pag = str_replace('<conteudo>', $mestre[0], $conteudo_mestre);
				}
				return $pag;
			}
			return false;
 	}

	public function Renderizar(Controle $control){
        $novo_conteudo = '';
		$conteudo = $control->Conteudo();

        if(sizeof($control->GetMultiploArray()) > 0){
            foreach($control->GetMultiploArray() as $key => $val){
                $novo_conteudo = str_replace($key, $val, $conteudo);
                $conteudo = $novo_conteudo;
            }
        }else{
            echo $conteudo;
        }

        echo $novo_conteudo;
    }

/**
 * Método responsável pela inserção de css e js padrães da página e também substituir 
 * as tags especiais por caminhos virtuais válido do sistema.
 */  
    public function InsereComponentes(Controle $control){
    	$conteudo = $control->Conteudo();
    	$controle = $control->GetSistema()->GetPaginaAtual();

    	$tmp_css = ROOT_CSS . $controle . '.css';
    	$tmp_js = ROOT_JS . $controle . '.js';

    	$css = (file_exists($tmp_css))? "<link rel='stylesheet' type='text/css' href='$tmp_css' />" : '';
		$js = (file_exists($tmp_js))? "<script type='text/javascript' language='javascript' src='$tmp_js'></script>" : '';
		
		$array = array('%CSS%' 	=> 	$css,
					   '%JS%'	=>	$js,
					   '%IMG%'	=> 	ROOT_IMG,
					   '%SWF%'	=>	ROOT_SWF);

		foreach($array as $texto => $valor){
			$novo_conteudo = str_replace($texto, $valor, $conteudo);
			$conteudo = $novo_conteudo;
		}

		$control->Conteudo($conteudo);

	}

	public function PossuiMaster($conteudo){
		$busca = '<%([\w]*)\=([\w]*)%>';
		$item = preg_match($busca, $conteudo, $founds);
		
		//Utils::PrintArray($founds);die();
		if($item){
			$novo_conteudo = str_replace("<{$founds[0]}>", '', $conteudo);
			$array = array($novo_conteudo, $founds[2]);
			return $array;
		}
		return false;
	}
}